package com.turbo.cloud.ums.web.logic;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.turbo.cloud.core.base.PageQuery;
import com.turbo.cloud.core.exception.BusinessException;
import com.turbo.cloud.ums.web.entity.UmsSystem;
import com.turbo.cloud.ums.web.model.system.UmsSystemQO;
import com.turbo.cloud.ums.web.model.system.UmsSystemVO;
import com.turbo.cloud.ums.web.service.IUmsSystemService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * <p>
 * 系统表 逻辑处理类
 * </p>
 *
 * @author zhangluning
 * @since 2022-08-13
 */
@Slf4j
@RequiredArgsConstructor
@Component
public class SystemLogic {

    final IUmsSystemService umsSystemService;

    /**
     * 模糊查询系统分页列表
     *
     * @param pageQuery 分页实体
     * @return 分页数据
     */
    public Page<UmsSystemVO> querySystemPageByLike(PageQuery<UmsSystemQO> pageQuery) {

        Page<UmsSystem> pageResultTmp = umsSystemService.querySystemPageByLike(pageQuery);
        Page<UmsSystemVO> pageResult = new Page<>();
        BeanUtils.copyProperties(pageResultTmp, pageResult);

        return pageResult;
    }

    /**
     * 获取单个系统
     *
     * @param id 系统ID
     * @return
     */
    public UmsSystemVO querySystemById(String id) {
        UmsSystem resultTmp = umsSystemService.getById(id);
        UmsSystemVO result = new UmsSystemVO();
        BeanUtils.copyProperties(resultTmp, result);
        return result;
    }

    /**
     * 新增系统
     *
     * @param umsSystemQO 实体
     * @return
     */
    public Boolean createSystem(UmsSystemQO umsSystemQO) {

        UmsSystem umsSystem = new UmsSystem();
        BeanUtils.copyProperties(umsSystemQO, umsSystem);

        /*
         * 判断系统是否已经存在
         */
        LambdaQueryWrapper<UmsSystem> queryWrapperBySystemName = new LambdaQueryWrapper();
        queryWrapperBySystemName.eq(UmsSystem::getSystemName, umsSystem.getSystemName());
        List<UmsSystem> systemListBySystemName = umsSystemService.list(queryWrapperBySystemName);
        if (CollUtil.isNotEmpty(systemListBySystemName)) {
            throw new BusinessException("系统名称已存在");
        }
        /*
         * 判断系统是否已经存在
         */
        LambdaQueryWrapper<UmsSystem> queryWrapperBySystemCode = new LambdaQueryWrapper();
        queryWrapperBySystemCode.eq(UmsSystem::getSystemCode, umsSystem.getSystemCode());
        List<UmsSystem> systemListBySystemCode = umsSystemService.list(queryWrapperBySystemCode);
        if (CollUtil.isNotEmpty(systemListBySystemCode)) {
            throw new BusinessException("系统编码已存在");
        }

        boolean result = umsSystemService.save(umsSystem);
        if (!result) {
            throw new BusinessException("新增系统失败");
        }
        return true;
    }

    /**
     * 修改系统
     *
     * @param umsSystemQO 实体
     * @return
     */
    public Boolean modifySystem(UmsSystemQO umsSystemQO) {
        UmsSystem umsSystem = new UmsSystem();
        BeanUtils.copyProperties(umsSystemQO, umsSystem);

        LambdaQueryWrapper<UmsSystem> queryWrapper = new LambdaQueryWrapper();
        queryWrapper.eq(UmsSystem::getSystemCode, umsSystem.getSystemCode());
        queryWrapper.ne(UmsSystem::getId, umsSystem.getId());
        List<UmsSystem> systemList = umsSystemService.list(queryWrapper);
        if (CollUtil.isNotEmpty(systemList)) {
            throw new BusinessException("系统编码已存在");
        }

        boolean result = umsSystemService.updateById(umsSystem);
        if (!result) {
            throw new BusinessException("修改系统失败");
        }
        return true;
    }

    /**
     * 删除系统
     *
     * @param id 系统ID
     * @return
     */
    public boolean removeSystemById(String id) {
        boolean result = umsSystemService.removeById(id);
        if (!result) {
            throw new BusinessException("修改系统失败");
        }
        return true;
    }
}
